# 类型注解
from typing import Union

# 变量的类型注解
# 变量名: 类型名 = XXX
val1: int = 100
mylist: list = [100, 200, 300]
mylist2: list[int] = [1, 2, 3]
mydict: dict[str, int] = {"hhh": 123}


def test():
    return True


val: bool = test()
val2: str = 123  # 类型注释是错的不会导致程序不运行

# 使用注释来标记
# 注释写上 type: 变量类型
val3 = "123"  # type: str


# 函数(方法)的类型注释
# 让ctrl+p有类型提示 参数使用.调用变量或方法有补全提示等
def add(x: int, y: int):
    return x + y


print(add(2, 3))


# 对返回值进行注解
# 在括号和冒号之间写上 -> 返回类型
def func(data:  list) -> list:
    return data


print(func(1))  # 非强制性的, 即传入参数有误时程序不会不运行


# Union类型
# 应对混合类型的类型注释
# 需要导包typing
my_list: list[Union[str, int]] = ["123", 333]


def func2(data: Union[str, int]) -> Union[int, str]:
    return data


print(func2(1))
print(func2("haha"))
